์ž‘์„ฑ: 2026-03-04 04:03:38์ˆ˜์ •: 2026-03-04 04:03:38

Docker ๋ฐ Docker Compose ๊ธฐ์ดˆ: ์ปจํ…Œ์ด๋„ˆ๋กœ ํ™˜๊ฒฝ ํ†ตํ•ฉํ•˜๊ธฐ

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•  ๋•Œ ๊ฐ€์žฅ ํ”ํ•œ ๋ฌธ์ œ๋Š” "๋‚ด ์ปดํ“จํ„ฐ์—์„œ๋Š” ์ž˜ ๋˜๋Š”๋ฐ ์„œ๋ฒ„์—์„œ๋Š” ์•ˆ ๋œ๋‹ค"๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. **Docker(๋„์ปค)**๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ๊ทธ ์‹คํ–‰ ํ™˜๊ฒฝ์„ '์ปจํ…Œ์ด๋„ˆ'๋ผ๋Š” ๋‹จ์œ„๋กœ ๋ฌถ์–ด ์–ด๋””์„œ๋“  ๋™์ผํ•˜๊ฒŒ ์‹คํ–‰๋˜๋„๋ก ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.


1. Docker๋ž€ ๋ฌด์—‡์ธ๊ฐ€?

Docker๋Š” OS ์ˆ˜์ค€์˜ ๊ฐ€์ƒํ™”๋ฅผ ํ†ตํ•ด ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ฒฉ๋ฆฌ๋œ ํ™˜๊ฒฝ(์ปจํ…Œ์ด๋„ˆ)์—์„œ ์‹คํ–‰ํ•˜๋Š” ๊ธฐ์ˆ ์ž…๋‹ˆ๋‹ค.

  • ์ด๋ฏธ์ง€(Image): ์‹คํ–‰์— ํ•„์š”ํ•œ ์ฝ”๋“œ, ๋Ÿฐํƒ€์ž„, ์„ค์ • ๋“ฑ์„ ๋‹ด์€ ์ฝ๊ธฐ ์ „์šฉ ํ…œํ”Œ๋ฆฟ์ž…๋‹ˆ๋‹ค. (๋ถ•์–ด๋นต ํ‹€)
  • ์ปจํ…Œ์ด๋„ˆ(Container): ์ด๋ฏธ์ง€๋ฅผ ์‹คํ–‰ํ•œ ์ƒํƒœ์ž…๋‹ˆ๋‹ค. ๊ฒฉ๋ฆฌ๋œ ํ™˜๊ฒฝ์—์„œ ๋…๋ฆฝ์ ์œผ๋กœ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค. (๋ถ•์–ด๋นต)

2. Spring Boot ํ”„๋กœ์ ํŠธ Dockerfile ์ž‘์„ฑํ•˜๊ธฐ

ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ์— Dockerfile์ด๋ผ๋Š” ์ด๋ฆ„์˜ ํŒŒ์ผ์„ ๋งŒ๋“ค๊ณ  ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

# 1. ๋นŒ๋“œ ์Šคํ…Œ์ด์ง€
FROM eclipse-temurin:21-jdk-alpine AS build
WORKDIR /app
COPY . .
RUN ./gradlew bootJar
 
# 2. ์‹คํ–‰ ์Šคํ…Œ์ด์ง€ (์ด๋ฏธ์ง€ ์ตœ์ ํ™”)
FROM eclipse-temurin:21-jre-alpine
WORKDIR /app
COPY --from=build /app/build/libs/*.jar app.jar
ENTRYPOINT ["java", "-jar", "app.jar"]

3. Docker Compose: ์—ฌ๋Ÿฌ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ํ•œ ๋ฒˆ์— ๊ด€๋ฆฌํ•˜๊ธฐ

๋ณดํ†ต ์›น ์„œ๋น„์Šค๋Š” '์• ํ”Œ๋ฆฌ์ผ€์ด์…˜'๊ณผ '๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค'๊ฐ€ ํ•จ๊ป˜ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. Docker Compose๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด docker-compose.yml ํŒŒ์ผ ํ•˜๋‚˜๋กœ ์—ฌ๋Ÿฌ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋™์‹œ์— ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

docker-compose.yml ์˜ˆ์‹œ

services:
  db:
    image: mysql:8.0
    environment:
      MYSQL_DATABASE: mydb
      MYSQL_ROOT_PASSWORD: password
    ports:
      - "3306:3306"
 
  app:
    build: .
    ports:
      - "8080:8080"
    depends_on:
      - db
    environment:
      SPRING_DATASOURCE_URL: jdbc:mysql://db:3306/mydb
  • ์‹คํ–‰: docker-compose up -d (๋ฐฑ๊ทธ๋ผ์šด๋“œ ์‹คํ–‰)
  • ์ค‘์ง€: docker-compose down

4. ์™œ Docker๋ฅผ ์จ์•ผ ํ• ๊นŒ?

  1. ํ™˜๊ฒฝ ์ผ์น˜: ๊ฐœ๋ฐœ์ž PC, ํ…Œ์ŠคํŠธ ์„œ๋ฒ„, ์šด์˜ ์„œ๋ฒ„์˜ ํ™˜๊ฒฝ์„ ์™„๋ฒฝํžˆ ์ผ์น˜์‹œํ‚ต๋‹ˆ๋‹ค.
  2. ๋น ๋ฅธ ๋ฐฐํฌ: ์ด๋ฏธ์ง€ ์ „์†ก๋งŒ์œผ๋กœ ์„œ๋ฒ„ ๋ฐฐํฌ๊ฐ€ ๋๋‚˜๋ฉฐ, ๋กค๋ฐฑ๋„ ๋งค์šฐ ๋น ๋ฆ…๋‹ˆ๋‹ค.
  3. ์ž์› ํšจ์œจ์„ฑ: ๊ฐ€์ƒ๋จธ์‹ (VM)๋ณด๋‹ค ๊ฐ€๋ณ๊ณ  ๋น ๋ฅด๋ฉฐ ํ•˜๋‚˜์˜ ์„œ๋ฒ„์— ๋” ๋งŽ์€ ์„œ๋น„์Šค๋ฅผ ๋„์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด์ œ Docker๋ฅผ ํ†ตํ•ด ๋ณต์žกํ•œ ์„ค์น˜ ๊ณผ์ • ์—†์ด ํด๋ฆญ ํ•œ ๋ฒˆ์œผ๋กœ ์„œ๋ฒ„ ํ™˜๊ฒฝ์„ ๊ตฌ์ถ•ํ•ด ๋ณด์„ธ์š”!